function itcast(selector) {
  var dom = document.querySelector(selector);
  var obj = {
    tap: function(cb) {
      var startTime;
      var startX, startY;
      dom.addEventListener("touchstart", function(e) {
        if (e.touches.length > 1) {
          return;
        }
        startTime = Date.now();
        startX = e.touches[0].clientX;
        startY = e.touches[0].clientY;
      });
      dom.addEventListener("touchend", function(e) {
        if (e.changedTouches.length > 1) {
          return;
        }

        var endTime = Date.now();
        if (endTime - startTime > 200) {
          return;
        }

        var endX = e.changedTouches[0].clientX;
        var endY = e.changedTouches[0].clientY;
        if (Math.abs(endX - startX) > 5 || Math.abs(endY - startY) > 5) {
          return;
        }

        cb();
      });
    },
    swipe:function (cb) {
      var startTime,startX,startY;
      // 按下
      dom.addEventListener("touchstart",function (e) {
        // 1 判断手指的个数
        if(e.touches.length>1){
          return
        }

        // 2 记录按下的时间
        startTime=Date.now();

        // 3 记录按下的坐标
        startX=e.touches[0].clientX;
        startY=e.touches[0].clientY;
        
      })
      // 离开
      dom.addEventListener("touchend",function (e) {
        // 1 判断手指的个数
        if(e.changedTouches.length>1){
          return;
        }
        //  2 记录离开的时间
        var endTime=Date.now();
        if(endTime-startTime>800){
          return;
        }

        // 3 记录松开坐标
        var endX=e.changedTouches[0].clientX;
        var endY=e.changedTouches[0].clientY;
        /* 
        1 先判断水平方向有没有产生位移 
            如果 水平方向有位移 > 左滑动还是右滑
        2 或者 判断 垂直方向上有没有产生位移
            如果有位移  上移动  下移动 
        3 或者 手根本就没有滑动过 直接return 返回 
         */

        // 滑动的方向
        var direction;

        //  3.1 先判断水平
        if(Math.abs(endX-startX)>5){
          // 再判断 左 还是右  结束坐标 >开始坐标 右
          direction=endX>startX?"right":"left";
        }else if(Math.abs(endY-startY)>5){
          // 垂直方向的位移 再判断 上滑动还是下滑动  结束>开始 下滑动
          direction=endY>startY?"down":"up";
        }else{
          // 用户手根本就没有滑动过 
          return;
        }

       cb(direction);
      })
  
      
    }
  };
  return obj;
}